<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <!-- 
        Promise 是 ES6 引入的异步编程的新解决方案。语法上Promise是一个构造函数,
        用来封装异步操作并可以获取其成功或失败的结果。

        1.Promise 构造函数: Promise (excutor) {}
        2.Promise.prototype.then 方法
        3.Promise.prototype.catch 方法
     -->

    <script>

        const p = new Promise((resolve, reject)=>{
            setTimeout(()=>{
                // resolve('用户数据')
                reject('出错啦!')
            },1000)
        })

        // 调用then方法 then方法的返回结果是 Promise 对象, 对象状态由回到函数的执行结果决定
        // 1. 如果函数中返回的结果是 非Promsie 类型的数据, 状态为成功, 返回值为对象的成功的值
        // 2.是 Promise对象, 内部返回的Promise的状态 决定 then方法返回Promise的状态
        // 3. 抛出错误
    //    const res =  p.then(value => {
    //         console.log(value)

    //         // return 123

    //         // return new Promise((resolve, reject)=>{
    //         //     // resolve('ok')
    //         //     reject('err')
    //         // })

    //         // throw new Error('出错啦')
    //         // throw '出错啦'

    //     }, reason =>{
    //         console.log(reason)
    //     })
    //     console.log(res)

        // 链式调用
        const res = p.then(value =>{
            return 123
        }, reason => {

        }).then(value => {
            return 456
        }, reason => {

        })

        console.log(res) // 成功的promise 值为456
        console.log(p) // 失败的promise
    </script>
</body>
</html>